package com.example.demo.repository; // 确认包名
import java.util.Optional;
import com.example.demo.model.IoTData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

// @Repository 注解告诉 Spring，这是一个数据仓库组件。
@Repository
// 我们的接口需要继承 JpaRepository，并告诉它我们要操作的是哪个类（IoTData），以及这个类的主键是什么类型（Long）。
public interface IoTDataRepository extends JpaRepository<IoTData, Long> {
    // 继承之后，我们就自动拥有了 `save()`(保存), `findById()`(按ID查找), `findAll()`(查找全部), `deleteById()`(删除) 等一系列强大的方法。
    // 在这个项目中，这些自动的方法已经足够我们使用了，所以接口里面什么都不用写！
     // 新的、高效的查询方法
    @Query(value = "SELECT " +
                   "MAX(CAST(j0 AS DOUBLE)) as maxJ0, " +
                   "MAX(CAST(j1 AS DOUBLE)) as maxJ1, " +
                   "MAX(CAST(j2 AS DOUBLE)) as maxJ2, " +
                   "MAX(CAST(j3 AS DOUBLE)) as maxJ3, " +
                   "MAX(CAST(j4 AS DOUBLE)) as maxJ4, " +
                   "MAX(CAST(j5 AS DOUBLE)) as maxJ5, " +
                   "MAX(CAST(j6 AS DOUBLE)) as maxJ6, " +
                   "MAX(CAST(j7 AS DOUBLE)) as maxJ7 " +
                   "FROM iot_data WHERE DATE(udt) = DATE(:dateString)",
           nativeQuery = true)
    Optional<DailyMaxVoltage> findDailyMaxesForDate(@Param("dateString") String dateString);
}